const Controller = require('egg').Controller;

class JobApplicationController extends Controller {
  // 投递简历（移除用户类型校验）
  async apply() {
    const { ctx, service } = this;
    try {
      // 仅保留登录验证（确保有用户ID）
      const userId = ctx.state.user_id;
      if (!userId) throw new Error('请先登录');

      // 验证参数
      const { job_id, resume_id } = ctx.request.body;
      ctx.validate({
        job_id: { type: 'number', required: true, message: '职位ID不能为空且必须为数字' },
        resume_id: { type: 'number', required: true, message: '简历ID不能为空且必须为数字' }
      });

      // 调用服务
      const result = await service.jobApplication.apply(job_id, resume_id, userId);
      ctx.body = { code: 0, data: result, msg: '简历投递成功' };
    } catch (error) {
      ctx.body = {
        code: 1,
        data: null,
        msg: error.errors
          ? `参数错误: ${error.errors[0].field} ${error.errors[0].message}`
          : error.message || '投递失败'
      };
    }
  }

  // 雇主查看申请（移除雇主类型校验）
  async employerApplications() {
    const { ctx, service } = this;
    try {
      // 仅保留登录验证
      const employerId = ctx.state.user_id;
      if (!employerId) throw new Error('请先登录');

      // 获取申请列表
      const result = await service.jobApplication.getEmployerApplications(employerId, ctx.query);
      ctx.body = { code: 0, data: result, msg: '获取成功' };
    } catch (error) {
      ctx.body = {
        code: 1,
        data: null,
        msg: error.message || '获取失败'
      };
    }
  }

  // 求职者查看自己的申请（移除用户类型校验）
  async myApplications() {
    const { ctx, service } = this;
    try {
      // 仅保留登录验证
      const userId = ctx.state.user_id;
      if (!userId) throw new Error('请先登录');

      // 获取申请列表
      const result = await service.jobApplication.getMyApplications(userId, ctx.query);
      ctx.body = { code: 0, data: result, msg: '获取成功' };
    } catch (error) {
      ctx.body = {
        code: 1,
        data: null,
        msg: error.message || '获取失败'
      };
    }
  }

  // 审核申请（移除雇主/管理员类型校验）
  async review() {
    const { ctx, service } = this;
    try {
      // 仅保留登录验证
      // 从token中获取管理员ID
      const token = ctx.request.header.admintoken;
      const decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret);
      const operatorId = decode.admin_id;
      if (!operatorId) throw new Error('请先登录');

      // 验证参数
      const { id } = ctx.params;
      const { status, note } = ctx.request.body;
      ctx.validate({ id: { type: 'id', required: true, message: '申请ID不能为空' } }, ctx.params);
      ctx.validate({
        status: { type: 'number', required: true, range: { in: [1, 2] }, message: '状态必须为1（通过）或2（拒绝）' },
        note: { type: 'string', required: false, max: 500, message: '审核备注不能超过500字' }
      });

      // 调用服务
      const result = await service.jobApplication.review(id, operatorId, { status, note });
      ctx.body = {
        code: 0,
        data: result,
        msg: status === 1 ? '申请已通过' : '申请已拒绝'
      };
    } catch (error) {
      ctx.body = {
        code: 1,
        data: null,
        msg: error.errors
          ? `参数错误: ${error.errors[0].field} ${error.errors[0].message}`
          : error.message || '审核失败'
      };
    }
  }

  // 管理员查看所有申请（移除管理员类型校验）
  async adminList() {
    const { ctx, service } = this;
    try {
      // 仅保留登录验证
      if (!ctx.state.user_id) throw new Error('请先登录');

      // 调用服务层获取所有申请列表
      const result = await service.jobApplication.getAdminApplications(ctx.query);
      ctx.body = { code: 0, data: result, msg: '获取申请列表成功' };
    } catch (error) {
      ctx.body = {
        code: 1,
        data: null,
        msg: error.message || '获取申请列表失败'
      };
    }
  }
}

module.exports = JobApplicationController;